home *** CD-ROM | disk | FTP | other *** search
/ CBM Funet Archive / cbm-funet-archive-2003.iso / cbm / geos / programming / geoBasic.patch.lnx / GB Notes #1 (.txt) next >
Encoding:
GEOS ConVerT  |  1999-06-16  |  8.2 KB  |  163 lines

  1. gb nOTES #1
  2. prg FORMATTED geos FILE v1.0
  3. wRITE iMAGE v2.1
  4. rED sTORM
  5. GEOwRITE    v1.1
  6.   tHIS FILE WAS CREATED WITH
  7. wRONG IS wRITE.
  8.   wRITTEN BY jOE bUCKLEY.
  9.  @GEObASIC mODULE dEFINITIONS:
  10. vlir #cONSTANTlOADS @dESCRIPTION
  11. r_main$0400rESIDENT CODE. tWO jmp'S @ $0400 THEN SKIP
  12. TO $07FC TO LEAVE ROOM FOR SCREEN MEMORY.
  13. tHIS MODULE CONTAINS ALL THE CODE THAT MUST
  14. ALWAYS BE AVAILABLE.  aLL THE OTHER MODULES
  15. USE THE SUBROUTINES CONTAINED HERE.
  16. 1r_file$4EC7hIGH LEVEL DISK FILE STUFF (rENAME, oPEN, ETC).
  17. 2r_da*$75D8rUN'S da'S.  *lOADS INSIDE fg_buffer ON 64
  18. OR screen_base ON THE 128.  tHIS KEEPS IT
  19. FROM OVERWRITING bASIC'S CODE.
  20. 3r_init$4EC7GEOBASIC iNITIALIZATION CODE. lOADED FROM
  21. rESIDENT CODE.
  22. 4r_load$7501bASIC pROGRAM LOADER. lOADS INTO fg_buffer
  23. (SEE r_da).
  24. 5r_bint$4F96iNTERPRETER (bASrES). tHIS IS THE MODULE THAT
  25. ACTUALLY RUNS THE USER'S PROGRAM.
  26. 6r_bint2$0400
  27. 7r_font$6F8BfONT mANAGER (CfONT, CsYSiNFO, AND
  28. gETdISKbITMAP).
  29. 8r_disk$6F8BlOWER LEVEL DISK STUFF (READING BYTES, ETC).
  30. 9r_print$6F8BpRINTER rOUTINES.
  31. 10r_menu$4EC7mENU uTILITY.
  32. 11r_dbox$4EC7dIALOG bOX uTILITY.
  33. 12r_icon$4EC7iCON uTILITY.
  34. 13r_bmap$4EC7bITMAP uTILITY.
  35. 14r_sprt$4EC7sPRITE uTILITY.
  36. 15r_edit$4503eDITOR.
  37. 16r_appl$4B00mAKE aPPLICATION (RUN-TIME).
  38. 17r_debug$47CCdEBUGGER.
  39.  @gb pROGRAM, dISK lAYOUT
  40.  @rECORDS 0 TO 9 -
  41.  LEFT EMPTY TO LEAVE ROOM FOR gb CODE WHEN MAKING RUN-TIME.
  42.  @rECORD #10 -
  43.  vlir TABLE.  kEEPS TRACK OF WHAT MODULES HOLD WHAT LINE #'S.  uSED FOR DOING THE vlir SPLITTING.  tHE TABLE IS A SINGLE SECTOR AND THERE IS ONE EIGHT BYTE ENTRY FOR EACH PROGRAM MODULE.  tHE ENTRIES HAVE THE FOLLOWING FORMAT:
  44. .WORD ?; hIGHEST LINE NUMBER IN MODULE.
  45. .WORD ?; lENGTH_OF_MODULE (IN BYTES)
  46. .BYTE ?; NESTING_LEVEL
  47. .BYTE ?; WRITE_STATUS
  48. .BYTE ?; MODIFIED_STATUS
  49. .BYTE null; TERMINATOR
  50. tHE VERY FIRST ENTRY IS A BIT DIFFERENT.  iT LOOKS LIKE THIS:
  51. .WORD ???; (nulls)
  52. .BYTE X; NUMBER OF ENTRIES IN THE vlir TABLE (NOT
  53. ; COUNTING THIS ONE WHICH IS ENTRY #0).
  54. .BYTE X; NUMBER OF LABELS IN THE LABEL TABLE (MINUS 1,
  55. ; LABELS ARE NUMBERED FROM ZERO!).  iF THERE
  56. ; ARE NO LABELS THEN IT EQUALS $FF.
  57. .BYTE $F0?
  58. .BYTE $F6?
  59. .WORD ???
  60.  @rECORD #11 -
  61.  oBJECT TABLE.  aLL OF THE GEOS OBJECTS ARE STORE IN THIS RECORD, ONE RIGHT AFTER THE OTHER.
  62.  @rECORD #12 -
  63.  lABEL tABLE.  hERE IS WHERE THE LABELS (@XXXX AND OBJECT NAMES) ARE STORED.  eACH LABEL ENTRY IS 8 BYTES LONG AND HAS THE FOLLOWING FORMAT:
  64.  @fOR @ LABELS:
  65. .BLOCK 6; LABEL NAME PADDED WITH nullS
  66. .WORD LINE_NUMBER
  67.  @fOR OBJECT LABELS (I.E. BITMAPS, MENUS, ICONS, ETC.):
  68. .BYTE TYPE; $80 = mENU
  69. ; $81 = db
  70. ; $82 = iCON
  71. ; $83 = sPRITES
  72. ; $84 = bITMAP
  73. .BLOCK 5; OBJECT NAME PADDED WITH nullS
  74. .WORD ADDRESS; WHERE IN MEMORY THE OBJECT IS LOCATED.
  75.  @rECORD #13 ONWARD - 
  76. hOLDS THE BASIC PROGRAM LINES.  eACH LINE HAS THE FOLLOWING FORMAT:
  77. .BYTE; LENGTH_OF_LINE
  78. .WORD; LINE_NUMBER
  79. .BLOCK ???; NOW COMES THE TOKENIZED TEXT
  80. .BYTE null; TERMINATOR
  81.  @rECORD #126 BACKWARD -
  82.  dISK LOADABLE BITMAPS ARE STORED BEGINNING AT RECORD #126.  aDDITIONAL BITMAPS ARE ADDED BACKWARDS UNTIL THEY MEET UP WITH THE PROGRAM RECORDS.  nOTE THAT 
  83.  DISK LOADABLE BITMAPS ARE STORED HERE.  rEGULAR BITMAPS ARE STORED IN THE oBJECT tABLE (RECORD #11).
  84.  @gETTING rEGISTERS AFTER A call:
  85. aFTER USING THE call COMMAND USE CAN GET THE RETURN VALUES OF THE REGISTERS BY peekING THE FOLLOWING MEMORY LOCATIONS:
  86.  @a= 
  87. $28A (650)
  88.  @x = 
  89. $28B (651)
  90.  @y= 
  91. $28C (652)
  92.  @sr= 
  93. $28D (653)
  94.  @pop cOMMAND:
  95. tHE OLD (v1.0) pOP COMMAND HAD SEVERAL SERIOUS BUGS THAT CAUSED A SYSTEM CRASH.  tHE NEW VERSION WORKS LIKE THIS:  EXECUTING A pop WILL REMOVE THE CURRENT gosub/while/repeat STACK FRAME.  iN OTHER WORDS IT WILL ALLOW YOU TO 'FORGET' THAT YOU ARE IN A SUBROUTINE OR LOOP (THIS DOES NOT APPLY TO A for...next LOOP).  oNE THING TO KEEP IN MIND IS THAT AFTER EXECUTING A pop YOU MUST NOT ALLOW THE PROGRAM TO REACH THE return/loop/until COMMANDS.  tHE BEST WAY OF DOING THIS IS WITH A CONSTRUCT LIKE THIS:
  96.  10 gosub dOsOMETHING
  97. 20 end
  98. 50 @dOsOMETHING
  99. 60   <VARIOUS COMMANDS>
  100. 70   if SOMETHING = ERROR then pop : goto @dOeRROR
  101. 80 return
  102. 100 @dOeRROR
  103. 110    .... ETC
  104. oF COURSE IF YOU ARE TWO LEVELS DEEP IN A SUBROUTINE AND EXECUTE A pop, THEN YOU EXECUTE A return THE PROGRAM WILL RETURN two LEVELS BACK RATHER THEN JUST ONE.  cOULD COME IN HANDY AT TIMES.
  105.  @gb vARIABLES - ZERO PAGE
  106. nAMEaDDRESSsIZEdESCRIPTION
  107. BAScUR$81/129WORDCURRENT CHARACTER IN BASIC MEMORY
  108. BASbEGIN$83/131WORDPOINTER TO BEGINNING OF BASIC
  109. BASICeND$85/133WORDPOINTER TO BEGINNING OF LABELS (MINUS 1 FOR END OF BASIC)
  110. VARbEGIN$87/135WORDPOINTER TO THE BEGINNING OF
  111. VARIABLES
  112. ARRAYbEGIN$89/137WORDPOINTER TO THE BEGINNING OF ARRAYS
  113. ARRAYeND$8B/139WORDPOINTER TO THE END OF ARRAYS
  114. ARRAYlENGTH$8D/141WORDLENGTH OF ARRAY/TEMPORARY REGISTER
  115. STRNbEGIN$8F/143WORDPOINTER TO THE BEGINNING OF STRINGS
  116. ZEROsHIFT$91/145BYTEUSED BY FLOATING POINT ROUTINES
  117. DEC_PT$92/146BYTEUSED BY FLOATING POINT ROUTINES
  118. VARpTR$93/147WORDPOINTER TO VALUE OF VARIABLE
  119. MACHINE_TYPE$95/149BYTE0 IF C64, $80 IF 128
  120. STRNsTACK$96/1509 BYTESSTACK FOR THREE TEMP STRING DESCRIPTORS
  121. STRNsTKiNDX$9F/159BYTEINDEX INTO STRNsTACK
  122. PREVsTRNsTKiNDX$A0/160BYTEPREVIOUS STRNsTACK INDEX
  123. RDiNDEX$A1/161BYTEINDEX TO READING IN STRINGS
  124. GAX2$A2/162WORD(NOT COMMENTED IN SOURCE CODE)
  125. CURsTRN$A4/164WORDPOINTER TO MOST CURRENT STRING THAT
  126. WAS ADDED OR MOVED.
  127. STRNdES$A6/166WORDPOINTER TO STRING DESCRIPTOR
  128. DESCpTR$A8/168WORDPOINTER TO STRING DESCRIPTOR FOR STRING OPERATIONS.
  129. GEOSbEGIN$AA/170WORDPOINTER TO THE BEGINNING OF OBJECT
  130. (MENUS, ICONS, ETC.) DATA.
  131. MEMaMNT$AC/172WORDAMOUNT OF MEMORY TO INSERT OR DELETE
  132. CURkEYbRDpOS$AE/174WORD(NOT COMMENTED IN SOURCE)
  133. sETfORiotEMP$B0/176WORD(NOT COMMENTED IN SOURCE)
  134. CURlINEnUM$B2/178WORDCURRENT LINE NUMBER BEING EXECUTED OR
  135. $FF IN DIRECT MODE
  136. vlirTABL$B4/180WORDPOINTER TO BEGINNING OF vlir TABLE
  137. XpOS$B6/182WORDx POSITION FOR print
  138. YpOS$B8/184BYTEy POSITION FOR print
  139. OPmASK$B9/185BYTECURRENT COMPARISON BEING PERFORMED
  140. >/1, =/2, </4 OR ANY COMBO OF THESE
  141. COMM_fLAG$BA/186BYTEFLAG FOR WHICH COMMAND IS CURRENTLY
  142. BEING EXECUTED: 0 = NONE, 1 = run,
  143. -1 = list - USED BY THE eDITOR
  144. DATApTR$BC/188WORDPOINTER IN BASIC TO data STATEMENTS
  145. fp_SGNS$BE/190BYTETEMP FLAG FOR SIGN OF fp NUMBER
  146. EXP_FOUND$BF/191BYTEFLAG FOR WHETHER EXPONENT WAS FOUND
  147. FONTbEGIN$C0/192WORDPOINTER TO BEGINNING OF FONT
  148. LASTfONTpTR$C2/194WORD(NOT COMMENTED IN SOURCE)
  149. CURdbpTR$C4/196WORDPOINTER TO CURRENT DIALOG BOX DATA
  150. SPRITE STUFF$C6/19836 BYTESINTERNAL SPRITE VARIABLES
  151. R16$EA/234WORDMORE REGISTERS
  152. R17$EC/236WORD
  153. R18$EE/238WORD
  154. R19$F0/240WORD
  155. R20$F2/242WORD
  156. R21$F4/244WORD
  157. NUMdIM$F6/246BYTENUMBER OF DIMENSIONS IN ARRAY
  158. GRBACKGROUND$F7/247BYTEfg/bg COLORS OF GRAPHICS SCREEN
  159. DIG_FOUND$F8/248BYTEFLAG FOR WHETHER A DIGIT WAS FOUND
  160. WHEN CONVERTING STRINGS TO fp
  161. OPERAND_MASK$F9/249BYTE>/1, =/2, </4
  162. STRNfLAG$FA/250BYTE$FF IF STRING EXPECTED, ELSE 0
  163.